home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Tools / Languages / Harvest C 1.3 / Source Code / Assem.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-01-02  |  8.7 KB  |  176 lines  |  [TEXT/ALFA]

  1. /*
  2.  * Harvest C
  3.  * 
  4.  * Copyright 1991 Eric W. Sink   All rights reserved.
  5.  * 
  6.  * This file defines the interface for type records.
  7.  * 
  8.  */
  9.  
  10. #ifndef Assem_INTERFACE
  11. #define Assem_INTERFACE
  12.  
  13. #include "instenum.h"
  14.  
  15. typedef int                     Opcode_t;
  16.  
  17. struct tmpl {            /* a template to match */
  18.     char                            sizes;    /* allowed sizes (bit map) */
  19.     char                            modes[4];    /* up to 4 EA fields may be
  20.                          * specified */
  21.     char                            opclass;    /* opcode class */
  22.     unsigned short                  op;    /* base opcode */
  23.     unsigned short                  op2;    /* second opcode (F-line,
  24.                          * etc) */
  25. };
  26.  
  27. struct mne {            /* a mnemonic */
  28.     char                           *mne_name;
  29.     Opcode_t                        OP;
  30.     char                            ntmpl;    /* number of templates to
  31.                          * test */
  32.     struct tmpl                    *ptmpl;    /* pointer to templates to
  33.                          * test */
  34. };
  35.  
  36. /* sizes */
  37. #define    B    0x01
  38. #define W    0x02
  39. #define L    0x04
  40. #define S    0x08
  41. #define D    0x10
  42. #define X    0x20
  43. #define P    0x40
  44. #define U    0x80
  45. /* composite sizes */
  46. #define    bwlu    (B|W|L|U)
  47. #define    bwlsdxp    (B|W|L|S|D|X|P)
  48. #define    wlu    (W|L|U)
  49. #define    bu    (B|U)
  50. #define wu    (W|U)
  51. #define    lu    (L|U)
  52. #define    wl    (W|L)
  53. #define xu      (X|U)
  54. #define bwlsdxpu (B|W|L|S|D|X|P|U)
  55. #define anysz    (B|W|L|S|D|X|P|U)
  56.  
  57. /* opcode classes */
  58. #define INH             0
  59. #define RXRY            1
  60. #define RXRYS           2
  61. #define RXRYR           3
  62. #define RXRYP           4
  63. #define EAREG           5
  64. #define EAREGS          6
  65. #define REGEA           7
  66. #define REGEAS          8
  67. #define IMMEAS          9
  68. #define QUKEA           10
  69. #define IMMB            11
  70. #define IMMW            12
  71. #define IMMWS           13
  72. #define IMM3            14
  73. #define IMM4            15
  74. #define RSHIFT          16
  75. #define QSHIFT          17
  76. #define EA              18
  77. #define EAREV           19
  78. #define EAS             20
  79. #define BCC             21
  80. #define BIT             22
  81. #define BITFLD          23
  82. #define BITFLD2         24
  83. #define CALLM           25
  84. #define CAS             26
  85. #define CAS2            27
  86. #define CHK             28
  87. #define CHK2            29
  88. #define DBCC            30
  89. #define MULDIV          40
  90. #define REG             41
  91. #define MOVEU           42    /* move to/from usp */
  92. #define REGIMM          43
  93. #define MOVE            44
  94. #define MOVEC           45
  95. #define MOVEQ           46
  96. #define MOVEMO          47
  97. #define MOVEMI          48
  98. #define MOVEPO          49
  99. #define MOVEPI          50
  100. #define MOVES           51
  101. #define TRAPCC          52
  102.  
  103. /* floating point classes */
  104. #define FEAREG          53
  105. #define FREGREG         54
  106. #define FMONAD          55
  107. #define FBCC            56
  108. #define FDBCC           57
  109. #define FINH            58
  110. #define FEA             59
  111. #define FSCC            60
  112. #define FEAPAIR         61
  113. #define FREGPAIR        62
  114. #define FTSTEA          63
  115. #define FTSTREG         64
  116. #define FMOVE           65
  117. #define FMOVECR         66
  118. #define FMOVEMI         67
  119. #define FMOVEMO         68
  120. #define FMOVEMCI        69
  121. #define FMOVEMCO        70
  122. #define FTRAPCC         71
  123.  
  124. /* PMMU classes */
  125. #define PINH            72
  126. #define PBCC            73
  127. #define PDBCC           74
  128. #define PFLUSH          75
  129. #define PEA             76
  130. #define PLOAD           77
  131. #define PMOVEI          78
  132. #define PMOVEO          79
  133. #define PSCC            80
  134. #define PTEST           81
  135. #define PTRAPCC         82
  136. #define PVALID          83
  137. #define PMOVEIF         84
  138.  
  139. /* generic co-processor classes */
  140. #define CPINH           85
  141. #define CPBCC           86
  142. #define CPDBCC          87
  143. #define CPGEN           88
  144. #define CPEA            89
  145. #define CPSCC           90
  146. #define CPTRAPCC        91
  147.  
  148. /* 68hc16 specific classes */
  149. #define    LPSTOP        92
  150. #define    TABEA        93
  151. #define    TABREG        94
  152.  
  153. /* pseudo op classes */
  154. #define EQU             100
  155. #define DC              101
  156. #define OPT             102
  157. #define ORG             103
  158. #define DS              104
  159. #define FEQU            105
  160. #define FOPT            106
  161. #define NULL_OP         107
  162. #define ALIGN           108
  163. #define INCLUDE         109
  164. #define RORG            110
  165. #define CODEW           111
  166.  
  167. struct ea {
  168.     char                            type;
  169.     char                            itype;    /* when INDEX or PCINDEX,
  170.                          * itype specifies sub-mode */
  171.     int                             reg;    /* An,Dn,Sp,FPn,Rc,FPc,Pn */
  172.     int                             reg2;    /* second register for reg.
  173.                          * pairs */
  174.     int                             konst;    /* #val, displacement, branch
  175.                          * dest */
  176.     int